import Vue from 'vue'
import axios from 'axios'
import baseConfig from './base.config'
// import getErrorMessage from './exceptions'

import { Message } from 'element-ui'
import { getToken } from '@/utils/auth'
// import store from '@/store'
// import { getToken } from '@/utils/auth'

// 根据基本配置创建axios实例
const instance = axios.create(baseConfig)

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 请求之前,做一些处理
    // if (store.getters.token) {
    //   // 每个请求都将携带token
    //   // ['X-Token']自定义请求头,根据实际情况替换
    //   config.headers['X-Token'] = getToken()
    // }
    const tokenStr = getToken()
    config.headers.Authorization = tokenStr || ''
    return config
  },
  error => {
    // 请求出错的处理
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // console.log(response)
    return response
  },
  // 服务端返回状态码是2xx
  // response => {
  //   // 通过response自定义code来标示请求状态，当code返回如下情况为权限有问题
  //   // 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
  //   const res = response.data

  //   // 判断自定义响应码是否等于2000, 不是出现异常
  //   if (res.code !== 200) {
  //     // res.message如果用户看不懂,可以在显示之前进行异常码转换在进行显示
  //     Message({
  //       message: res.msg || 'Error',
  //       type: 'error',
  //       duration: 5000
  //     })

  //     // 判断登录状态是否正常 50008: 不合法的token; 50012: 异地登录; 50014: token过期;
  //     if ([50008, 50012, 50014].includes(res.code)) {
  //       // 重新登录
  //       MessageBox.confirm('登录信息失效,请重新登录', '确定登出', {
  //         confirmButtonText: '重新登录',
  //         cancelButtonText: '取消',
  //         type: 'warning'
  //       }).then(() => {
  //         // 点击重新登录,清除浏览器的token,然后重载页面
  //         store.dispatch('user/resetToken').then(() => {
  //           location.reload()
  //         })
  //       })
  //     }
  //     return Promise.reject(new Error(res.msg || 'Error'))
  //   } else {
  //     return res
  //   }
  // },
  // 服务器状态码不是2开头的的情况
  error => {
    console.log('err' + error) // for debug
    Message({
      message: error.message,
      type: 'error',
      duration: 5000
    })
    return Promise.reject(error)
  }
)

Vue.prototype.$get = instance.get
Vue.prototype.$post = instance.post
Vue.prototype.$axios = instance
